/*
 *  Copyright 2003 by Texas Instruments Incorporated.
 *  All rights reserved. Property of Texas Instruments Incorporated.
 *  Restricted rights to use, duplicate or disclose this code are
 *  granted through contract.
 *  
 */
#include <csl.h>
#include <csl_dat.h>
#include <csl_cache.h>
#include <chan.h>
#include <scom.h>
#include <utl.h>
#include "appMain.h"

/*-------------------------------------------------------*/
/* perform all initializations                           */
/*-------------------------------------------------------*/
void main()
{
    int i;

    CSL_init();                                             
    CACHE_clean(CACHE_L2ALL, 0, 0);
    CACHE_setL2Mode(CACHE_64KCACHE);       
    CACHE_enableCaching(CACHE_EMIFA_CE00);
    CACHE_enableCaching(CACHE_EMIFA_CE01);
  
#define L2ALLOC3 0x0184200C
    *(int *) L2ALLOC3 = (*(int *) L2ALLOC3) | 0x00000007;

#define L2ALLOC2 0x01842008
    *(int *) L2ALLOC2 = (*(int *) L2ALLOC2) | 0x00000007;

#define L2ALLOC1 0x01842004
    *(int *) L2ALLOC1 = (*(int *) L2ALLOC1) | 0x00000007;

    CACHE_setPriL2Req(CACHE_L2PRIHIGH);  
    

    /*-------------------------------------------------------*/
    /*Open DAT for 2 dimensional copy */
    /*-------------------------------------------------------*/
    DAT_open(DAT_CHAANY,DAT_PRI_LOW, DAT_OPEN_2D);
    
    UTL_setLogs( &logTrace, &logTrace, &logTrace, &logTrace );

    /*-------------------------------------------------------*/
    /*Initialize RF5 modules                                  */
    /*-------------------------------------------------------*/
    CHAN_init();
    ICC_init();
    SCOM_init();
    
    /*-------------------------------------------------------*/
    /*Setup the RF-5 chan module                             */
    /*-------------------------------------------------------*/
    CHAN_setup( intHeap, extHeap, intHeap, 1, NULL, NULL);
    
    /*-------------------------------------------------------*/
    /*Initialize the three tasks                             */
    /*-------------------------------------------------------*/
    tskVideoInputInit();
    tskVideoOutputInit();
    tskProcessInit();
    
    /*-------------------------------------------------------*/
    /*Start the three tasks                                  */
    /*-------------------------------------------------------*/
    tskVideoInputStart();
    tskVideoOutputStart();
    tskProcessStart();

    /*-------------------------------------------------------*/
    /* create all SCOM and message objects                   */
    /*-------------------------------------------------------*/
    for(i = 0; i<NUM_SCOM_OBJS_IN; i++) {
	    objSCOMInToProc[i][0] = SCOM_create("INTOPROC", NULL);
	    objSCOMInToProc[i][1] = SCOM_create("PROCTOIN", NULL);
	    
	}
	
    for(i = 0; i<NUM_SCOM_OBJS_OUT; i++) {
        objSCOMProcToOut[i][0] = SCOM_create("PROCTOOUT", NULL);
        objSCOMProcToOut[i][1] = SCOM_create("OUTTOPROC", NULL);
	    
    }    
}
